        template <class Object>

        void List<Object>::insert( const Object & x, const ListItr<Object> & p )

        {

            if( p.current != NULL )

                p.current->next = new ListNode<Object>( x, p.current->next );

        }



        /**

         * Return iterator corresponding to the first node containing an item x.

         * Iterator isPastEnd if item is not found.

         */

        template <class Object>

        ListItr<Object> List<Object>::find( const Object & x ) const

        {

/* 1*/      ListNode<Object> *itr = header->next;



/* 2*/      while( itr != NULL && itr->element != x )

/* 3*/          itr = itr->next;



/* 4*/      return ListItr<Object>( itr );

        }



        /**

         * Return iterator prior to the first node containing an item x.

         */

        template <class Object>

        ListItr<Object> List<Object>::findPrevious( const Object & x ) const

        {

/* 1*/      ListNode<Object> *itr = header;



/* 2*/      while( itr->next != NULL && itr->next->element != x )

/* 3*/          itr = itr->next;



/* 4*/      return ListItr<Object>( itr );

        }
